Return to start page

Systems/Character/Struct Item Type.j

Code

		
1			library AStructSystemsCharacterItemType requires optional ALibraryCoreDebugMisc, AStructCoreGeneralHashTable, AStructCoreGeneralVector, ALibraryCoreMathsConversion, AStructSystemsCharacterClass, AStructSystemsCharacterCharacter
2
3 /// Represents an item type, not an item object!
4 struct AItemType
5 //static constant members
6 public static constant integer equipmentTypeHeaddress = 0
7 public static constant integer equipmentTypeArmour = 1
8 public static constant integer equipmentTypePrimaryWeapon = 2
9 public static constant integer equipmentTypeSecondaryWeapon = 3
10 public static constant integer equipmentTypeAmulet = 4
11 public static constant integer maxEquipmentTypes = 5
12 //static start members
13 private static string textLevel
14 private static string textStrength
15 private static string textAgility
16 private static string textIntelligence
17 private static string textClass
18 //start members
19 private integer m_itemType
20 private integer m_equipmentType
21 private integer m_requiredLevel
22 private integer m_requiredStrength
23 private integer m_requiredAgility
24 private integer m_requiredIntelligence
25 private AClass m_requiredClass
26 //members
27 private AIntegerVector m_abilities
28 private ABooleanVector m_permanent
29
30 //! runtextmacro optional A_STRUCT_DEBUG("\"AItemType\"")
31
32 //start members
33
34 public method itemType takes nothing returns integer
35 return this.m_itemType
36 endmethod
37
38 public method equipmentType takes nothing returns integer
39 return this.m_equipmentType
40 endmethod
41
42 public method requiredLevel takes nothing returns integer
43 return this.m_requiredLevel
44 endmethod
45
46 public method requiredStrength takes nothing returns integer
47 return this.m_requiredStrength
48 endmethod
49
50 public method requiredAgility takes nothing returns integer
51 return this.m_requiredAgility
52 endmethod
53
54 public method requiredIntelligence takes nothing returns integer
55 return this.m_requiredIntelligence
56 endmethod
57
58 public method requiredClass takes nothing returns AClass
59 return this.m_requiredClass
60 endmethod
61
62 //methods
63
64 public method addAbility takes integer abilityId, boolean permanent returns integer
65 call this.m_abilities.pushBack(abilityId)
66 call this.m_permanent.pushBack(permanent)
67 return this.m_abilities.backIndex()
68 endmethod
69
70 public method checkRequirement takes ACharacter character returns boolean
71 if (GetHeroLevel(character.unit()) < this.m_requiredLevel) then
72 call character.displayMessage(ACharacter.messageTypeError, thistype.textLevel)
73 return false
74 elseif (GetHeroStr(character.unit(), true) < this.m_requiredStrength) then
75 call character.displayMessage(ACharacter.messageTypeError, thistype.textStrength)
76 return false
77 elseif (GetHeroAgi(character.unit(), true) < this.m_requiredAgility) then
78 call character.displayMessage(ACharacter.messageTypeError, thistype.textAgility)
79 return false
80 elseif (GetHeroInt(character.unit(), true) < this.m_requiredIntelligence) then
81 call character.displayMessage(ACharacter.messageTypeError, thistype.textIntelligence)
82 return false
83 elseif (this.m_requiredClass != 0 and character.class() != this.m_requiredClass) then
84 call character.displayMessage(ACharacter.messageTypeError, thistype.textClass)
85 return false
86 endif
87 return true
88 endmethod
89
90 public method addAllAbilities takes unit who returns nothing
91 local integer i = 0
92 loop
93 exitwhen (i == this.m_abilities.size())
94 call UnitAddAbility(who, this.m_abilities[i])
95 //call UnitMakeAbilityPermanent(who, this.m_permanent[i], this.m_abilities[i]) //stay when unit morphs
96 set i = i + 1
97 endloop
98 endmethod
99
100 public method removeAllAbilities takes unit who returns nothing
101 local integer i = 0
102 loop
103 exitwhen (i == this.m_abilities.size())
104 call UnitRemoveAbility(who, this.m_abilities[i])
105 set i = i + 1
106 endloop
107 endmethod
108
109 public method addPermanentAbilities takes unit who returns nothing
110 local integer i = 0
111 loop
112 exitwhen (i == this.m_abilities.size())
113 if (this.m_permanent[i]) then
114 debug call this.print("Adding permanent ability " + GetObjectName(this.m_abilities[i]) + " to unit " + GetUnitName(who))
115 call UnitAddAbility(who, this.m_abilities[i])
116 endif
117 set i = i + 1
118 endloop
119 endmethod
120
121 public method removePermanentAbilities takes unit who returns nothing
122 local integer i = 0
123 loop
124 exitwhen (i == this.m_abilities.size())
125 if (this.m_permanent[i]) then
126 debug call this.print("Removing permanent ability " + GetObjectName(this.m_abilities[i]) + " from unit " + GetUnitName(who))
127 call UnitRemoveAbility(who, this.m_abilities[i])
128 endif
129 set i = i + 1
130 endloop
131 endmethod
132
133 public method addUsableAbilities takes unit who returns nothing
134 local integer i = 0
135 loop
136 exitwhen (i == this.m_abilities.size())
137 if (not this.m_permanent[i]) then
138 call UnitAddAbility(who, this.m_abilities[i])
139 endif
140 set i = i + 1
141 endloop
142 endmethod
143
144 public method removeUsableAbilities takes unit who returns nothing
145 local integer i = 0
146 loop
147 exitwhen (i == this.m_abilities.size())
148 if (not this.m_permanent[i]) then
149 call UnitRemoveAbility(who, this.m_abilities[i])
150 endif
151 set i = i + 1
152 endloop
153 endmethod
154
155 /// @param equipmentType If this value is -1 it will always be added to rucksack.
156 public static method create takes integer itemType, integer equipmentType, integer requiredLevel, integer requiredStrength, integer requiredAgility, integer requiredIntelligence, AClass requiredClass returns thistype
157 local thistype this = thistype.allocate()
158 //start members
159 set this.m_itemType = itemType
160 set this.m_equipmentType = equipmentType
161 set this.m_requiredLevel = requiredLevel
162 set this.m_requiredStrength = requiredStrength
163 set this.m_requiredAgility = requiredAgility
164 set this.m_requiredIntelligence = requiredIntelligence
165 set this.m_requiredClass = requiredClass
166 //members
167 set this.m_abilities = AIntegerVector.create()
168 set this.m_permanent = ABooleanVector.create()
169
170 debug if (AHashTable.global().integer("AItemTypes", I2S(itemType)) != 0) then
171 debug call this.print("Item type " + I2S(itemType) + " already has an item type.")
172 debug endif
173 call AHashTable.global().setInteger("AItemTypes", I2S(itemType), this)
174 //debug call this.print("Storing item type " + I2S(itemType))
175 return this
176 endmethod
177
178 public method onDestroy takes nothing returns nothing
179 //members
180 call this.m_abilities.destroy()
181 call this.m_permanent.destroy()
182
183 call AHashTable.global().removeInteger("AItemTypes", I2Hexadecimal(this.m_itemType))
184 endmethod
185
186 public static method init takes string textLevel, string textStrength, string textAgility, string textIntelligence, string textClass returns nothing
187 //static start members
188 set thistype.textLevel = textLevel
189 set thistype.textStrength = textStrength
190 set thistype.textAgility = textAgility
191 set thistype.textIntelligence = textIntelligence
192 set thistype.textClass = textClass
193 endmethod
194
195 public static method getItemTypeOfItemTypeId takes integer itemTypeId returns thistype
196 debug call thistype.staticPrint("Getting item type of item type id " + I2S(itemTypeId))
197 return AHashTable.global().integer("AItemTypes", I2S(itemTypeId))
198 endmethod
199
200 /// @author Tamino Dauth
201 public static method getItemTypeOfItem takes item usedItem returns thistype
202 return thistype.getItemTypeOfItemTypeId(GetItemTypeId(usedItem))
203 endmethod
204 endstruct
205
206 endlibrary